package biz.datalk.industrialland.admin.modules.system.service;

import biz.datalk.industrialland.common.result.UnifyResult;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author tarofang@163.com
 * @date 2021-05-13
 */
public interface ICommonService {
    /**
     *
     * 上传文件
     * /sys/common/upload/{type}
     *
     * @author       tarofang@163.com
     * @date         2021年05月14日
     *
     * @param type 上传类型。保存时的前缀或bucketName
     * @param request {@link javax.servlet.http.HttpServletRequest}
     *  file - 上传的文件
     *  preview - 是否返回预览路径 Y-返回预览路径 N-不返回预览路径
     * @return {@link biz.datalk.framework.core.common.result.UnifyResult}
     *  data的详细内容
     *  当 preview=Y 时， data=${dbpath}, 文件存储的相对路径
     *  当 preview=N 时， data={"path":"文件存储的相对路径", "preview":"预览路径,如${prefix}${contextPath}/sys/common/view/${path}"}
     */
    UnifyResult upload(String type, HttpServletRequest request);

    /**
     * 批量上传文件
     *
     * /sys/common/uploadbatch/{type}
     *
     * @author       tarofang@163.com
     * @date         2021年05月14日
     *
     * @param type 上传类型。保存时的前缀或bucketName
     * @param request {@link javax.servlet.http.HttpServletRequest}
     *  file - 上传的文件
     *  preview - 是否返回预览路径 Y-返回预览路径 N-不返回预览路径
     * @return {@link biz.datalk.framework.core.common.result.UnifyResult}
     *  data的详细内容
     *  当 preview=Y 时， data=["${dbpath}", "${dbpath}"], 文件存储的相对路径
     *  当 preview=N 时， data=[{"path":"文件存储的相对路径", "preview":"预览路径,如${prefix}${contextPath}/sys/common/view/${path}"}]
     */
    UnifyResult uploadbatch(String type, HttpServletRequest request);

    /**
     * 保存文件
     * /sys/common/upload/{type}
     * /sys/common/uploadbatch/{type}
     * 以上两个接口文件存储会走该方法
     *
     * @author       tarofang@163.com
     * @date         2021年05月14日
     *
     * @param mf 上传的文件
     * @param type 上传类型。保存时的前缀或bucketName
     * @param ymd 当前时间的格式， yyyy/MM/dd
     * @param validExtensions 有效的文件后缀
     * @param maxSize 允许上传的文件的大小，单位 byte
     * @return UnifyResult.data 是文件存储的相对路径
     */
    UnifyResult saveFile(MultipartFile mf, String type, String ymd, String[] validExtensions, long maxSize);

    /**
     *
     * 预览接口
     * /sys/common/view/**
     * 请求地址：http://localhost:8080/common/view/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg}
     *
     * @author       tarofang@163.com
     * @date         2021年05月14日
     *
     * @param request {@link javax.servlet.http.HttpServletRequest}
     * @param response {@link javax.servlet.http.HttpServletResponse}
     */
    void view(HttpServletRequest request, HttpServletResponse response);

    /**
     *
     * 下载接口
     * /sys/common/download/**
     * 请求地址：http://localhost:8080/common/download/{user/20190119/e1fe9925bc315c60addea1b98eb1cb1349547719_1547866868179.jpg}
     *
     * @author       tarofang@163.com
     * @date         2021年05月14日
     *
     * @param request {@link javax.servlet.http.HttpServletRequest}
     * @param response {@link javax.servlet.http.HttpServletResponse}
     */
    void download(HttpServletRequest request, HttpServletResponse response);

}
